Android 侧滑抽屉菜单

您所在的位置:网站首页 android studio滑动菜单 Android 侧滑抽屉菜单

Android 侧滑抽屉菜单

2023-04-23 14:40| 来源: 网络整理| 查看: 265

侧滑抽屉菜单​​前言​​​​正文​​​​一、创建项目​​​​二、添加滑动菜单​​​​三、UI美化​​​​四、添加导航视图​​​​五、菜单分类​​​​六、动态菜单​​​​七、源码​​

运行效果图:

Android 侧滑抽屉菜单_滑动菜单

前言

  滑动菜单相信都不会陌生,你可能见过很多这样的文章,但我的文章会给你不一样的阅读和操作体验。

正文

  写博客,自然是从创建项目开始了,这样你可以更好的知道这个过程中经历了什么。

一、创建项目

  项目就命名为DrawerDemo,

Android 侧滑抽屉菜单_侧滑菜单_02

绝对的手把手教学,让你清楚每一步怎么做。

然后打开app下的build.gradle,在android{}闭包中添加如下代码:

//配置JDK的版本 compileOptions { targetCompatibility JavaVersion.VERSION_1_8 sourceCompatibility JavaVersion.VERSION_1_8 }

这里是配置JDK的版本,为1.8,我个人最喜欢的版本。一旦项目中的build.gradle有改动,便会出现Sync Now或者Sync的同步提示,如下图所示:

Android 侧滑抽屉菜单_抽屉菜单_03

右上角的就是这个同步提示,如果你不点击进行同步,则你刚才在build.gradle中的改动无效,下面点击Sync Now。

二、添加滑动菜单

打开layout,找到activity_main.xml,修改代码后如下所示:

{ //打开滑动菜单 左侧出现 drawerLayout.openDrawer(GravityCompat.START); }); }}

这里我创建一个变量,然后在onCreate中绑定布局id。然后在按钮的点击事件中,通过openDrawer方法打开滑动菜单,里面传入GravityCompat.START,START是左侧,GravityCompat是重力兼容,表示兼容低版本,在低版本的AS中你就要使用Gravity.START。

这里的START和布局中的start是要对应上的,如果你不对应上就会报错,那么下面运行一下吧。

Android 侧滑抽屉菜单_抽屉菜单_05

嗯,这个效果是有了,但是感觉比较的丑,那么来美化一下吧。

三、UI美化

打开res下values文件夹中的styles.xml。

把DarkActionBar改成NoActionBar,意思是去掉默认的导航栏。

Android 侧滑抽屉菜单_android_06

然后你再运行一下,你会发现好看了一点点。

Android 侧滑抽屉菜单_android_07

不过屏幕顶部还是有那个很丑的状态栏,因此我们还需要美化一下。

在MainActivity中增加一个方法来设置状态栏透明。

/** * 透明状态栏 */ private void transparentStatusBar() { //改变状态栏颜色为透明 View decorView = getWindow().getDecorView(); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); getWindow().setStatusBarColor(Color.TRANSPARENT); }

这个方法先拿到当前Actvity的DecorView,它是Activity的根部视图,相当于最底层的视图,你想要详细的了解就需要去看源码了。 然后调用setSystemUiVisibility来改变系统UI的显示。View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN和View.SYSTEM_UI_FLAG_LAYOUT_STABLE表示Activity的布局会显示在状态栏上面,之后调用setStatusBarColor方法设置状态栏颜色为透明。

然后在onCreate中调用这个方法。

Android 侧滑抽屉菜单_xml_08

然后你还需要在activity_main.xml中去设置可以显示需要显示在状态栏中的布局。在主页面布局和滑动菜单的父布局中都添加一个属性:

android:fitsSystemWindows="true"

Android 侧滑抽屉菜单_抽屉菜单_09

然后再给主页面设置一个背景图,背景图如下:

Android 侧滑抽屉菜单_侧滑菜单_10

放到你项目的drawable文件夹下,然后在布局中设置

Android 侧滑抽屉菜单_侧滑菜单_11

下面运行一下:

Android 侧滑抽屉菜单_滑动菜单_12

现在这个感觉怎么样呢?比之前是不是好多了呢?但是你会发现这个按钮有一些不上档次了,显得是辣么的突兀。我们像个办法去掉它。

首先修改布局,将之前的按钮替换为如下代码:

android:id="@+id/toolbar" app:navigationIcon="@drawable/icon_menu" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"

添加位置如下图

Android 侧滑抽屉菜单_xml_13

这里的icon_menu是一个图标,在你的drawable下新建一个icon_menu.xml文件,里面的代码如下:

drawerLayout.openDrawer(GravityCompat.START));

点击之后打开这个滑动菜单。

下面你再运行一下:

Android 侧滑抽屉菜单_侧滑菜单_14

这样就简洁雅致了很多了。

四、添加导航视图

  现在我们的滑动菜单用的是一个LinearLayout,虽然用起来没有很大的问题,但是如果有更好的控件为什么不用呢?下面就来介绍一下NavigationView,不过要在AS中使用这个控件还需要添加一个依赖库:

打开你app下的build.gradle,在dependencies{}闭包中添加如下依赖

//添加material库 implementation 'com.google.android.material:material:1.2.1'

添加之后记得点击Sync Now进行同步项目。

然后修改activity_main.xml,去掉之前的滑动菜单,修改的页面布局代码如下:

rounded 50%

然后在nav_header.xml增加一个图标控件和两个文字控件,里面代码如下:

icon_email.xml

然后我们在res下新建一个menu文件夹,文件夹下新建一个nav_menu.xml文件。里面的代码如下:

showMsg("头像"));

然后就是菜单视图的点击了,如下所示,通过点击item的id进行判断,然后提示,之后关闭滑动菜单。

//导航菜单点击 navView.setNavigationItemSelectedListener(item -> { switch (item.getItemId()) { case R.id.item_friend: showMsg("朋友"); break; case R.id.item_wallet: showMsg("钱包"); break; case R.id.item_location: showMsg("位置"); break; case R.id.item_phone: showMsg("电话"); break; case R.id.item_email: showMsg("邮箱"); break; default: break; } //关闭滑动菜单 drawerLayout.closeDrawer(GravityCompat.START); return true; });

运行之后一一点击测试一下:

Android 侧滑抽屉菜单_抽屉菜单_19

嗯,和预想的效果一致,这也是现在很多APP侧滑菜单的用法,基本上就差不多了。

五、菜单分类

假如上面的五个菜单是基础功能,那么下面再添加一个扩展菜单。 当然还是要先添加这个菜单图标 icon_share.xml

NestedScrollView表示一个滚动视图,它里面只能放一个布局,当这个布局的高度超过屏幕时,则可以上下滚动显示,而这个布局里面又可以嵌套其他的布局。我在里面放置了之前的相对布局和新增的列表控件。下面我们进入到MainActivity。

先声明成员变量

private RecyclerView rvMenu;//列表

然后在onCreate中通过headerView去绑定布局中的id。

//绑定列表控件 rvMenu = headerView.findViewById(R.id.rv_menu);

然后再写一个方法用来显示菜单列表。

/** * 显示菜单列表 */ private void showMenuList() { //解析JSON数据 MenuResponse menuResponse = new Gson().fromJson(Contanst.JSON, MenuResponse.class); if (menuResponse.getCode() == Contanst.SUCCESS) { //为空处理 if(menuResponse.getData() ==null){ showMsg("返回菜单数据为空"); return; } List data = menuResponse.getData(); //设置适配器的布局和数据源 MenuAdapter menuAdapter = new MenuAdapter(R.layout.item_menu, data); //item点击事件 menuAdapter.setOnItemChildClickListener((adapter, view, position) -> { showMsg(data.get(position).getName()); //关闭滑动菜单 drawerLayout.closeDrawer(GravityCompat.START); }); //设置线性布局管理器,默认是纵向 rvMenu.setLayoutManager(new LinearLayoutManager(this)); //设置适配器 rvMenu.setAdapter(menuAdapter); } else { //错误提示 showMsg(menuResponse.getMsg()); } }

里面的代码都有注释,相信你一定可以看懂。

然后在onCreate中调用这个方法

Android 侧滑抽屉菜单_xml_24

运行。

Android 侧滑抽屉菜单_侧滑菜单_25

效果是有了,但是好像没有图标有点不得劲是吧。因为实际开发中的图标也是从后台返回过来的,一般来说是一个网络图标地址,这个地址你可以通过Glide库去进行图标显示。而我们没有这个网络地址,不过幸运的是,我们有之前手写的七个图标,不是吗。我们将这七个图标组成一个int数组,然后在适配器中进行配置就好了,不过首先呢需要改变一下item_menu.xml。

16sp

再进入activity_main.xml,修改NavigationView,修改内容如下:

android:id="@+id/nav_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="start" android:theme="@style/MenuTextStyle" app:headerLayout="@layout/nav_header" app:itemIconSize="24dp" app:itemIconTint="#000" app:itemTextColor="#000" app:menu="@menu/nav_menu"

再进入MainActivity中,修改菜单点击事件

Android 侧滑抽屉菜单_android_29

然后运行一下:

Android 侧滑抽屉菜单_滑动菜单

嗯,这样你现在动态也有静态也有,挺好的,本文就写到这里了。

上高水长,后会有期。

七、源码

源码地址:​​DrawerDemo​​



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3